#!/usr/bin/python
# -*- coding: utf-8 -*-

from gameobject import GameObject

from pygame.locals import Rect

from random import randint



class Ball( GameObject ):
    """
    Esta classe representa o elemento bola do jogo.
    """
    pause = False
    
    def __init__( self, image, marea, tarea ):
        """
        A bola é iniciada no centro do jogo com uma direção aleatória.

        image é a imagem que representa a bola, pode também ser uma string.
        marea é a área em que a bola pode circular.
        tarea é a área da mesa.
        """
        GameObject.__init__( self, image, [ 0, 0 ], marea )
        self.tarea = tarea
        self.start()
        self.pause = False
    # __init__()



    def start( self ):
        """
        Centra a bola e solta para algum lado, aleatoriamente.
        """
        self.rect.center = self.tarea.center

        ## Velocidade em X:
        # Escolhe uma direção:
        #    0 * 2 - 1 = -1 (esquerda)
        #    1 * 2 - 1 =  1 (direita)
        d = randint( 0, 1 ) * 2 - 1
        self.speed[ 0 ] = 3 * d
        ## Velocidade em Y
        self.speed[ 1 ] = randint( -3, 3 )
    # start()


    def update( self, dt ):
        """
        Atualiza a posição da bola.

        A bola inverte o movimento no eixo Y ao chegar ao topo ou baixo
        do jogo.
        """
        if self.pause:
            return
        
        GameObject.update( self, dt )

        if self.rect.top == self.marea.top or \
               self.rect.bottom == self.marea.bottom:
            self.invert_speed_y()
    # update()



    def check_out( self ):
        """
        Confere se a bola saiu ou não do jogo (pela direita ou esquerda).

        Esquerda = -1
        Direita  =  1
        Não saiu =  0
        """
        if self.rect.left  < self.tarea.left:
            return -1
        if self.rect.right > self.tarea.right:
            return 1
        
        return 0
    # check_out()



    def invert_speed_x( self ):
        """
        Inverte velocidade no eixo x
        """
        self.speed[ 0 ] = - self.speed[ 0 ]
    # invert_speed_x()



    def invert_speed_y( self ):
        """
        Inverte velocidade no eixo y
        """
        self.speed[ 1 ] = - self.speed[ 1 ]
    # invert_speed_x()



    def inc_speed_x( self, amount ):
        """
        Incrementa velocidade no eixo x de 'amount'
        """
        self.speed[ 0 ] += amount
    # inc_speed_x()


    
    def inc_speed_y( self, amount ):
        """
        Incrementa velocidade no eixo y de 'amount'        
        """
        self.speed[ 1 ] += amount
    # inc_speed_y()
# Ball
